<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    let arr = [5, 2, 2, 4]
    let set = new Set(arr)
    set.add([123, 'fqmysjjd'])
    set.delete(5)  // 删掉某个value  即5
    // 去重
    console.dir(set)
    // 解构得到原始数组
    console.dir([...set])
    // 清空
    set.clear()
    console.dir(set)

    set = new Set([arr])
    console.log(set.has(arr))
    arr = null
    // 可以看到，当我们释放arr时，虽然set.has(arr)是false，但是实际上Set内的数据仍然存在，解构可以打印，说明是深拷贝了一份数据
    console.log(set.has(arr))
    console.dir([...set][0])

    arr = [5, 2, 2, 4]

    // let weekSet_ = new WeakSet([1, 'fqm', true]) // 报错Invalid value used in weak set，弱集合不能存放基本类型
    let weekSet = new WeakSet([arr])
    console.dir(weekSet)
    console.dir(weekSet.has(arr))

    // Set和WeekSet的区别见WeekSet(Map) & Set(Map).md


    const m = new Map()
    const o = { p: 'haha' }
    m.set(o, 'content')
    m.get(o)	// content

    m.has(o)	// true
    m.delete(o)	// true
    m.has(o)	// false


  </script>
</body>

</html>